package evemanutool.utils.calc; import com.beimin.eveapi.shared.industryjobs.ApiIndustryJob; import evemanutool.constants.DBConstants.IndustryActivity; import evemanutool.data.cache.BlueprintAssetEntry; import evemanutool.data.database.Blueprint; public class IndustryJobCalculator { public static void updateWithIndustryJob(ApiIndustryJob iJ, BlueprintAssetEntry ba, Blueprint b) { //Temporary variables. int me = 0; int pe = 0; //(Now - JobStart) / (JobFinish - JobStart). double completionFactor = (double) (System.currentTimeMillis() - iJ.getBeginProductionTime().getTime()) / (iJ.getEndProductionTime().getTime() - iJ.getBeginProductionTime().getTime()); //Set to 0 if negative (Job is pending). completionFactor = completionFactor < 0 ? 0 : completionFactor; //Set to 1 if > 1 (Job is already finished). completionFactor = completionFactor > 1 ? 1 : completionFactor; //Set ME/PE levels. me = iJ.getInstalledItemMaterialLevel(); pe = iJ.getInstalledItemProductivityLevel(); if (iJ.getActivityID() == IndustryActivity.TIME.key) { pe = getResearchLevel(iJ, pe, b.getPeTime(), completionFactor); }else if (iJ.getActivityID() == IndustryActivity.MATERIAL.key) { me = getResearchLevel(iJ, me, b.getMeTime(), completionFactor); } //Update levels. updateBPOStats(ba, me, pe); } public static int getResearchLevel(ApiIndustryJob ij, int startLevel, int researchTime, double completionFactor) { return (int) (startLevel + (completionFactor * (ij.getEndProductionTime().getTime() - ij.getBeginProductionTime().getTime()) / (researchTime * ij.getTimeMultiplier() * ij.getCharTimeMultiplier() * 1000)) + 0.5); } public static void updateBPOStats(BlueprintAssetEntry ba, int me, int pe) { if (me > ba.getMe()) { ba.setMe(me); } if (pe > ba.getPe()) { ba.setPe(pe); } } }